package com.coderush.admin.core.listener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.web.context.support.ServletRequestHandledEvent;

/**
 * ClassName: ServletRequestHandledEventListener
 * Package: com.example.eventlistener.listener
 * Description:
 *          该类监听ServletRequestHandledEvent事件，
 *          该事件为请求结束回调事件，即一个请求完成结束后会执行onApplicationEvent内自定义业务逻辑
 * @Author wangxuezheng
 * @Create 2024/4/28 23:20
 * @Version 1.0
 */
@Slf4j
public class ServletRequestHandledEventListener implements ApplicationListener<ServletRequestHandledEvent> {

    @Override
    public void onApplicationEvent(ServletRequestHandledEvent event) {

        // 返回请求的URL。
        String url = event.getRequestUrl();
        // 返回请求来源的IP地址。
        String client = event.getClientAddress();
        // 以毫秒为单位返回请求的处理时间。
        long time = event.getProcessingTimeMillis();
        // 返回请求的HTTP方法(通常是GET或POST)。
        String method = event.getMethod();
        // 返回响应的HTTP状态码
        int statusCode = event.getStatusCode();

        log.info("客户端IP: {}, 请求的URL: {}, HTTP方法: {}, HTTP状态码: {}, 请求处理时长: {}ms", client, url, method, statusCode, time);
    }

}
